package Aleehot100;

import java.util.Arrays;

/**
 * ClassName: c020
 * Package: Aleehot100
 * Description:
 *
 * @Author BCXJ
 * @Create 2025/5/30 15:48
 * @Version 1.0
 * @Since 1.0
 */
public class c020 {
    public static void main(String[] args) {
        // int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
        int[][] arr = {{5,1,9,11},{2,4,8,10},{13,3,6,7},{15,14,12,16}};
        // rotate(arr);
        rotate2(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(Arrays.toString(arr[i]));
        }
    }



    // 使用辅助数组  O(n^2) O(n^2)
    // 对于矩阵中第 i 行的第 j 个元素，在旋转后，它出现在倒数第 i 列的第 j 个位置。
    public static void rotate(int[][] matrix) {
        int n = matrix.length;
        int m = matrix[0].length;
        int[][] new_arr = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                new_arr[j][n - i - 1] = matrix[i][j];
            }
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                matrix[i][j] = new_arr[i][j];
            }
        }
    }


    // 原地旋转  O(n^2)  O(1)
    // 原地旋转
    public static void rotate2(int[][] matrix) {
        // 顺时针旋转
        int n = matrix.length;
        for (int i = 0; i < n / 2; i++) {
            for (int j = 0; j < (n + 1) / 2; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[n - j - 1][i];
                matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
                matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
                matrix[j][n - i - 1] = temp;
            }
        }

        // 下面这是逆时针旋转
//        printArr(matrix);
//        int n = matrix.length;
//        for (int i = 0; i < n / 2; i++) {
//            for (int j = 0; j < (n + 1) / 2; j++) {
//                int temp = matrix[i][j];
//                matrix[i][j] = matrix[j][n - i - 1];
//                matrix[j][n - i - 1] = matrix[n - i - 1][n - j - 1];
//                matrix[n - i - 1][n - j - 1] = matrix[n - j - 1][i];
//                matrix[n - j - 1][i] = temp;
//                System.out.println(i + ":" + j);
//                printArr(matrix);
//            }
//        }
    }


    public static void printArr(int[][] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.println(Arrays.toString(arr[i]));
        }
        System.out.println("======");
    }
}
